
/*
 * 作者：勤为本
 * 勤为本的小店：https://shop333183734.taobao.com/
 */


#include <stdio.h>
#include <string.h>
#include <math.h>
#include "../lib/ls1c_public.h"
#include "../lib/ls1c_irq.h"
#include "../lib/ls1c_gpio.h"
#include "../lib/ls1c_delay.h"
#include "../lib/ls1c_mipsregs.h"
#include "../lib/ls1c_uart.h"
#include "../lib/ls1c_sys_tick.h"
#include "../lib/ls1c_clock.h"
#include "mpu6050.h"
#include "DataScope_DP.h"
#include "bluetooth.h"
#include "motor.h"



// 硬浮点初始化
void fpu_init(void)
{
    unsigned int c0_status = 0;
    unsigned int c1_status = 0;

    // 使能协处理器1--FPU
    c0_status = read_c0_status();
    c0_status |= (ST0_CU1 | ST0_FR);
    write_c0_status(c0_status);

    // 配置FPU
    c1_status = read_c1_status();
    c1_status |= (FPU_CSR_FS | FPU_CSR_FO | FPU_CSR_FN);    // set FS, FO, FN
    c1_status &= ~(FPU_CSR_ALL_E);                          // disable exception
    c1_status = (c1_status & (~FPU_CSR_RM)) | FPU_CSR_RN;   // set RN
    write_c1_status(c1_status);

    return ;
}


void bsp_init(void)
{
    // 初始化调试串口
    uart2_init();
    
    // 硬浮点初始化
    fpu_init();

    // 初始化异常
    exception_init();

    // 显示时钟信息
    clk_print_all();

    return ;
}


int main(void)
{
	int i = 0;
    int ret = 0;
    
    bsp_init();

    // 注意sdram_cfg.h中的内存大小，可以支持32M的和8M的，根据注释提示修改

    // CH341A的串口上电后，初始化需要时间，否则在CH341A成功初始化之前的那部分打印可能看不到
    delay_s(5);     // 调试用（正式发布时，可注释掉）

    // 与上位机（或手机APP）通信的模块DataScope初始化
    DataScope_Init();
    printf("[%s] DataScope init complete...\r\n", __FUNCTION__);

	// 蓝牙透传模块初始化
	bluetooth_init();

    // 陀螺仪 加速度计 六轴传感器MPU6050初始化
    while (0 != (ret = mpu6050_init()))
    {
        printf("[%s] mpu6050 init fail! ret=%d\r\n", __FUNCTION__, ret);
        delay_ms(50);
    }
    printf("[%s] mpu6050 init complete...\r\n", __FUNCTION__);

	// 电机初始化
	motor_init();
	printf("[%s] motor init complete...\r\n", __FUNCTION__);
    
    while (1)
    {
		// 发送状态（速度和倾角）
		bluetooth_send_status();

		// 发送曲线
		for (i = 0; i < 10; i++)
		{
			bluetooth_send_curve();
			delay_ms(10);
		}
    }
}





